﻿using System;
using System.Collections.Generic;

namespace Borg
{
    [Serializable]
    public class RuntimeConfig
    {
        private ApplicationConfig _applicationConfig = new ApplicationConfig();

        private string _user;
        private Uri _environmentUri;

        private string[] _loaderDirectories;
        private KeyValuePair<string, string>[] _arguments;

        private LoggerConfig[] _loggers;
        private VerbosityLevel _verbosity;

        private TypeConfig _loader;
        private TypeConfig _dispatcher;
        private TypeConfig _qualifier;
        private TypeConfig _composer;
        private TypeConfig _activator;
        private TypeConfig _notifier;
        private TypeConfig _invoker;
        private TypeConfig _typeStore;
        private TypeConfig _instanceStore;
        private TypeConfig _settingStore;
        private SettingProviderConfig _settingProvider;

        private PersistorConfig _persistor;
        private IList<AddOnTypeConfig> _addOns;

        public ApplicationConfig Application
        {
            get { return _applicationConfig; }
            set { _applicationConfig = value; }
        }

        public string User
        {
            get { return _user; }
            set { _user = value; }
        }

        public Uri EnvironmentUri
        {
            get { return _environmentUri; }
            set { _environmentUri = value; }
        }

        public string[] LoaderDirectories
        {
            get { return _loaderDirectories; }
            set { _loaderDirectories = value; }
        }

        public KeyValuePair<string, string>[] Arguments
        {
            get { return _arguments; }
            set { _arguments = value; }
        }

        public TypeConfig Dispatcher
        {
            get { return _dispatcher; }
            set { _dispatcher = value; }
        }

        public TypeConfig Loader
        {
            get { return _loader; }
            set { _loader = value; }
        }

        public TypeConfig Qualifier
        {
            get { return _qualifier; }
            set { _qualifier = value; }
        }

        public TypeConfig Composer
        {
            get { return _composer; }
            set { _composer = value; }
        }

        public TypeConfig Activator
        {
            get { return _activator; }
            set { _activator = value; }
        }

        public TypeConfig Notifier
        {
            get { return _notifier; }
            set { _notifier = value; }
        }

        public TypeConfig Invoker
        {
            get { return _invoker; }
            set { _invoker = value; }
        }

        public TypeConfig TypeStore
        {
            get { return _typeStore; }
            set { _typeStore = value; }
        }

        public TypeConfig InstanceStore
        {
            get { return _instanceStore; }
            set { _instanceStore = value; }
        }

        public TypeConfig SettingStore
        {
            get { return _settingStore; }
            set { _settingStore = value; }
        }

        public SettingProviderConfig SettingProvider
        {
            get { return _settingProvider; }
            set { _settingProvider = value; }
        }

        public PersistorConfig Persistor
        {
            get { return _persistor; }
            set { _persistor = value; }
        }

        public IList<AddOnTypeConfig> AddOns
        {
            get { return _addOns; }
            set { _addOns = value; }
        }

        public LoggerConfig[] Loggers
        {
            get { return _loggers; }
            set { _loggers = value; }
        }

        public VerbosityLevel Verbosity
        {
            get { return _verbosity; }
            set { _verbosity = value; }
        }
    }
}
